import lodash from 'lodash';
import * as store from './storage';
import {childConfig} from "@/config";

const EnumLoginInfoKey = '__login_info__';

class Auth {

  constructor() {

  }

  /**
   * 验证是否登录（token存在且没有过期）
   * @returns {boolean}
   */
  isLogin() {
    return !!this.getToken() && !store.isItemExpire('token');
  }

  /**
   * 设置token
   * @param token
   */
  setToken(token) {
    store.setStorage('token', token, lodash.now() + childConfig.tokenExpire);
  }

  /**
   * 给token续期
   */
  keepTokenExpire(){
    if(store.isItemExpire('token')){
      // 过期则删除
      store.removeStorage('token');
    } else {
      // 在有效期内则继续续期
      store.keepStorage('token', lodash.now() + childConfig.tokenExpire);
    }
  }

  /**
   * 设置菜单权限数据
   * @param menu
   */
  setMenuData(menu) {
    store.setStorage('MENU_INIT', menu);
  }

  /**
   * 获取菜单权限数据
   */
  getMenuData() {
    return store.getStorage('MENU_INIT') || {};
  }

  /**
   * 获取token
   * @returns {*}
   */
  getToken() {
    return store.getStorage('token');
  }

  /**
   * 保存登录信息
   * @param loginInfo
   */
  setLoginInfo(loginInfo) {
    store.setStorage(EnumLoginInfoKey, loginInfo);
  }

  /**
   * 获取登录信息
   * @return {*}
   */
  getLoginInfo() {
    return store.getStorage(EnumLoginInfoKey) || {};
  }

  /**
   * 清除所有登录信息
   */
  clearLoginState = () => {
    store.removeStorage(EnumLoginInfoKey);
    store.removeStorage('token');
    store.removeStorage('MENU_INIT');
  };
}

export default new Auth();
